草庐IT

c++ - C++中const的用法

全部标签

c++ - 高效的 const char* 连接和输出到 std::string

这个问题在这里已经有了答案:Mostoptimizedwayofconcatenationinstrings(9个回答)关闭9年前。首先要考虑的是,将存储在输出字符串中的总数据量几乎肯定很小,因此我怀疑其中任何一个都会对性能产生显着影响。我的主要目标是找到一种连接一系列大小未知的constchar*的方法,这种方法看起来并不糟糕,同时还要牢记效率。以下是我的搜索结果:方法一:std::stringstr=std::string(array1)+array2+array3;方法二:std::stringstr(array1);str+=array2;str+=array3;我决定使用第一

c++ - 为什么 operator char*() 在 bool 上下文中覆盖 operator bool() const?

似乎在c++中,在纯bool上下文中,operatorchar*()的优先级高于operatorbool()const;并启用c++11模式和使用explicitoperatorbool()const没有帮助。这是g++中的错误还是语言标准中的错误?或者我没有看到这种疯狂行为的充分理由?问题的简单演示:#includestructA{charbuf[512];interr;operatorchar*(){returnbuf;}operatorconstchar*()const{returnbuf;}operatorbool()const{return!err;}//explicitop

c++ - Opencv,对 `cv::imread(??cv::String const&???, int)' 的 undefined reference

这个问题在这里已经有了答案:error:undefinedreferenceto`cv::imread(std::stringconst&,int)'(4个答案)Whatisanundefinedreference/unresolvedexternalsymbolerrorandhowdoIfixit?(38个答案)关闭5年前。我在QT+Opencv中有一个项目,代码可以正常工作,但我必须格式化窗口,现在我试图再次导入该项目,但出现了这个错误。对`cv::imread(cv::Stringconst&,int)'的undefinedreference在这一行中:mat=cv::imre

c++ - 调用 const 可变 lambda

为了简化测试用例,假设我有以下包装类:templatestructWrapper{decltype(auto)operator()()const{returnm_t();}decltype(auto)operator()(){returnm_t();}Tm_t;};templateautomake_wrapper(Tt){returnWrapper{t};}假设我包装了以下简单的仿函数返回引用:structFoo{int&operator()(){returnx;}constint&operator()()const{returnx;}intx;};在我的main函数中,我试图将Foo

c++ - 为什么T 'skips'的模板参数推导是数组元素的const,而函数参数是对T的const引用?

让我们考虑一下这些定义:/***fulltypeinformationwithtypeid***/templateclassType{};templatestd::stringtypeStr(){returntypeid(Type).name();}/***functiontemplateforparameterdeduction***/templatevoidfunc(constT&a){std::cout()()指向常量的指针如果执行以下语句:constinti=5,*ip=&i;func(ip);输出是:DeducedtypeforTis:4TypeI**PKi**E所以T实际上

c++ - 构造函数何时调用 const-expr?

什么时候构造函数调用const-expr什么时候不是?在这个链接问题中Arethesevectordefinitions"constantinitialization"?构造函数不是const-expr,这就是vector未const初始化的原因。还有人可以更详细地解释该问题的答案吗? 最佳答案 您是在问何时可以在需要常量表达式的上下文中使用构造的结果?例如classA{constexprA(...){...};constexprintget(){...};...}constexprAa(...);std::arrayx{};换句话

c# - 如何将 C++/CLI 字符串转换为 const char*

我有一个C++/CLIDLL,我打算将其用作我的C#DLL和nativeC++客户端之间的适配器。我需要在两个方向上传递字符串。该适配器是使用VS2013编译的,但需要支持使用VS2008构建的客户端,因此我在API中使用constchar*。但是即使两者都是VS2013构建的,我所得到的也无法正常工作。我在其他地方找到了使用msclr\marshal.h的建议,因此我创建了:usingnamespacemsclr::interop;System::String^ToCliString(constchar*s){System::String^result=marshal_as(s);r

多线程系列(七) -ThreadLocal 用法及内存泄露分析

一、简介在Javaweb项目中,想必很多的同学对ThreadLocal这个类并不陌生,它最常用的应用场景就是用来做对象的跨层传递,避免多次传递,打破层次之间的约束。比如下面这个HttpServletRequest参数传递的简单例子!publicclassRequestLocal{/***线程本地变量*/privatestaticThreadLocallocal=newThreadLocal();/***存储请求对象*@paramrequest*/publicstaticvoidset(HttpServletRequestrequest){local.set(request);}/***获取请求

多线程系列(八) -ReentrantLock基本用法介绍

一、简介在之前的线程系列文章中,我们介绍到了使用synchronized关键字可以实现线程同步安全的效果,以及采用wait()、notify()和notifyAll()方法,可以实现多个线程之间的通信协调,基本可以满足并发编程的需求。但是采用synchronized进行加锁,这种锁一般都比较重,里面的实现机制也非常复杂,同时获取锁时必须一直等待,没有额外的尝试机制,如果编程不当,可能就容易发生死锁现象。从JDK1.5开始,引入了一个高级的处理并发的java.util.concurrent包,它提供了大量更高级的并发功能,能大大的简化多线程程序的编写。比如我们今天要介绍的java.util.co

c++ - 在 C++ 的元编程中保护从非 const-volatile 类型到 const-volatile 的赋值的正确方法是什么?

例如我有一个函数可以实现null_ortemplateautonull_or(T*p,U*default_value)->typenamestd::enable_if::type,typenamestd::decay::type>::value,T*>::type{if(p){returnp;}else{returndefault_value;}}仅使用std::decay将启用const/volatiletype*default_value分配给non-const/non-volatiletype*p.避免它的最佳方法是什么?此外,像typedefault_value[100]这样的